package com.employee.attendance_daka.service.Impl;

import com.employee.attendance_daka.domain.User;
import com.employee.attendance_daka.mapper.UserMapper;
import com.employee.attendance_daka.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;

import java.util.regex.Pattern;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    /**
     * 登录
     *
     * @param username
     * @param password
     * @return
     */
    @Override
    public String login(String username, String password) {
        // 基础非空校验（保留以确保服务层独立性）
        if (username == null || username.trim().isEmpty()) {
            return "用户名不能为空";
        }
        if (password == null || password.trim().isEmpty()) {
            return "密码不能为空";
        }

        try {
            // 直接尝试登录，同时验证用户是否存在和密码是否正确
            User user = userMapper.login(username, password);
            if (user != null) {
                return "登录成功";
            } else {
                return "用户名或密码错误";
            }
        } catch (Exception e) {
            return "系统异常，请稍后重试";
        }
    }

    /**
     * 注册
     *
     * @param username
     * @param password
     * @param email
     * @return
     */
    @Override
    public String register(String username, String password, String email) {
        //参数校验
        if(username == null || username.trim().isEmpty()){
            return "用户名不能为空";
        }
        if(password == null || password.trim().isEmpty()){
            return "密码不能为空";
        }
        if(email == null || email.trim().isEmpty()){
            return "邮箱不能为空";
        }

        //用户名格式校验（至少包含数字字母组合，长度在6-16位之间）
        if(!Pattern.matches("^[a-zA-Z0-9]{6,16}$", username)){
            return "用户名格式错误";
        }
        //密码格式校验（至少包含数字字母组合，至少8位）
        if(!Pattern.matches("(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$", password)){
            return "密码格式错误,至少是8位，且包含字母和数字";
        }
        //判断用户是否存在
        try{
            if(userMapper.existsByUsername(username)>0){
                return "用户已存在";
            }

            // 检查邮箱是否已存在
            if(userMapper.existsByEmail(email) > 0) {
                return "邮箱已被注册";
            }
            //创建对象
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            user.setEmail(email);

            //插入数据
            int result = userMapper.register(username, password, email);
            if(result > 0){
                return "注册成功";
            }else {
                return "注册失败";
            }
        }catch (DuplicateKeyException e){
            // 处理唯一键冲突
            if (e.getMessage().contains("username") || e.getMessage().contains("USERNAME")) {
                return "用户已存在";
            } else if (e.getMessage().contains("email") || e.getMessage().contains("EMAIL")) {
                return "邮箱已被注册";
            } else {
                return "用户已存在";
            }
        }catch (Exception e){
            // 记录详细日志以便调试
            e.printStackTrace();
            return "服务器内部错误";
        }
    }
}